package com.zyl.blog.tasks.schedule.abstracts;

import com.zyl.blog.tasks.enums.TaskType;

import java.time.temporal.ChronoUnit;

/**
 * @version v1.0
 * @ProjectName: Personal_Blog_Server
 * @Package: com.zyl.blog.tasks.schedule.abstracts
 * @ClassName: AbstractScheduledTask
 * @Description: 抽象定时任务类，所有定时任务需实现此接口
 * @Author FinalFantasy
 * @Date 2025/8/12-09:57
 */
public abstract class AbstractScheduledTask {

    /**
     * 获取任务名称
     */
    public abstract String getTaskName();

    /**
     * 获取任务描述
     */
    public abstract String getTaskDescription();

    /**
     * 任务执行方法
     */
    public abstract void execute();

    /**
     * 获取任务调度类型
     */
    public abstract TaskType getScheduleType();

    /**
     * 获取CRON表达式（当调度类型为CRON时）
     */
    public String getCronExpression() {
        return null;
    }

    /**
     * 获取间隔时间（当调度类型为FIXED_RATE或FIXED_DELAY时）
     */
    public long getTaskInterval() {
        return 0;
    }

    /**
     * 获取时间单位（当调度类型为FIXED_RATE或FIXED_DELAY时）
     */
    public ChronoUnit getTimeUnit() {
        return ChronoUnit.SECONDS;
    }

    /**
     * 获取任务所属用户
     */
    public abstract String getUsername();

    /**
     * 获取任务类的全限定名
     */
    public String getClassName() {
        return this.getClass().getName();
    }

    public Boolean startBoot() {
        return false;
    }
}